|
fawaz2000 مبرمج محترف
تاريخ التسجيل » Nov
2001
البلد » اليمن
- صنعاء
عدد
المشاركات » 297
بمعدل » 0.43 مشاركة لكل يوم |
بسم الله الرحمن الرحيم شكراُ
لكم إخواني : ويبدو ان قرائي هم من ذوي الخبرات : فعذراُ منكم
فقد أذكر أحيانا بعض المعلومات تكون قد مرت عليكم, ولكن فقط
اذكرها مراعياً المبتدئين , الذين لم أرى لهم وجود, فتدريجياُ
سأنتقل بالمعلومات إلى الأهمية فقط .
الدرس الثالث
: الأحداث لكل كائن حدث وهذا الحدث مسئول عن عمل معين في
لحظة معينة أي يقوم بتنفيذ مهمة (كود) في حال وقع علية حدث ما
. ولكي نستوعب الأمر جيداً سنأخذ مجوعة من الأحداث على سبيل
التوضيح :
1- الحدث الأول KeyDown :
code:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
End Sub
| | هذا الحدث هوا المسئول عن تنفيذ
مهمة معينة في حال كان مفتاح من أزرار الكيبور مضغوط (أو مجموعة
من المفاتيح) وأجزاء هذا الحدث هي : 1 - KeyCode As
Integer يمثل شفرة مفتاح , مثل( VbKeyF1) (المفتاح) F1 أو
vbKeyHome (المفتاحHome ) وغيرها من المفاتيح يمكنك تطبيق
ذلك كما يلي : نفذا هذا الكود في الحدث التابع للـ Form1 ثم
ضع الكود التالي في الحدث :
بعد ذلك قم بشغيل البرنامج وضغط
على المفتاح F1 لتلاحظ النتيجة على عنوان النافذة
Form1. لمعرفة المزيز عن الثوابت المقابلة للمفاتيح قم بالضغط
على زر Ctr والمسافة لتضهر لك قائمة بها مجموعة من الأوامر اكتب
أول الحروف Key بعد ذلك ستسرد لك القائمة مجموعة من ثوابت
المفاتيح , حيث أن جميع مفاتيح الكيبورد موجودة في هذه الثوابت
ولا ثمثل ( الأحرف ) فقط مفاتيح من F1 إلى F12 و مفاتيح الأسهم
وزر الهروب وغيرها . ويفيد KeyCode في فحص مفاتيح لوحة
المفاتيح حيث يعيد رقم المفتاح , وبذلك يمكن كتابة كود يقوم
بإظهار ارقام المفاتيح كمايلي :
code:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Me.Caption = KeyCode
End Sub
| |
ملاحضة مهمة جداً : لاحض
أن KeyCode يرجع أرقام الأحرف فقط الأحرف الكبيرة بينما الأحرف
الصغيرة يعطي رقمها كرقم حرف كبير على سبيل المثال : حرف A يرجع
رقمة 65 بينما a يرجع رقمة 65 أيضاً وهذا بالطبع غير صحيح لذلك
إذا اردنا معرفة الرقم المقابل للحرف الصغير نكتب الكود التالي
code:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Me.Caption = KeyCode + 32
End Sub
| | وهذا بدورة سيرجع الرقم المقابل
للحرف الصغير فسيرجع a برقم 97 , وقد يستائل البعض لماذا زيدنا
الرقم المرجع من KeyCode ب 32 , وهنا سأعتبر هذه الإجابة تمرين
أطلبه من القراء الأعزاء . الجزء الثاني Shift As
Integer هذا الجزء يعيد قيمة صحيحة تمثل أرقام المفاتيح Shift
, Ctrl , Alt وهذه الأرقام هي : 1 يقابل Shift 2 يقابل
Ctrl 4 يقابل Alt بينما في حالات الجمع بينهم يعيد
الأرقام التالية: 3 يقابل Ctrl + Shift 5 يقابل Shift +
Alt 6 يقابل Ctrl + Alt 7 يقابل Ctrl + Alt +
Shift
الثوابت المقابلة لأزرار Shift =
vbShiftMask Ctrl = vbCtrlMask Alt = vbAltMask
---------------------------------------- 2- الحدث
KeyUp يفيد هذا الحدث عندما يتم رفع الضغط عن الزر في تنفيذ
كود معين :
code:
Private Sub Command2_KeyUp(KeyCode As Integer, Shift As Integer)
End Sub
| | أجزاء الحدث : تخضع لنفس
الأجزاء السابقة . ملاحضة هامة جداً : الحدثين KeyDown ,
KeyUp إذا كان موضع زر أمر CommandButtom على النموذج وكانت
الخاصية للزر Cancel = True فإن الجزء KeyCod لايرجع قيمة لزر
ECC .
---------------------------------------- 3 -
الحدث KeyPress : ينفذ هاذا الحدث كود معين عندما يظغط
المستخدم زرا في لوحة المفاتيح
code:
Private Sub Form_KeyPress(KeyAscii As Integer)
End Sub
| |
الجزء(الباراميتر) KeyAscii
: يعيد قيمة صحيحة تمثل شفرة ASNI , يعيد الأرقام Asc للأحرف
الكبيرة والصغيرة مع إمكانية توقيف عمل أي زر . و KeyAscii
لايعيد ارقام المفاتح مثل F1.....F12 وغيرها .
وهنا نلاحظ
ان الأرقام كما ذكرت سابقاً تمثل الحرف في جدول أسكي ولكي نتمكن
من إضهار الرقم المقابل للحرف أو الحرف المقابل للرقم سنستخدم
الدوال التالية : Chr الصيغة العامة :
تستخدم هذه الدالة في إيجاد
الحرف المقابل للرقم مثلاً الرقم 65 هو عبارة عن A كي نتمكن من
إيجادة نستخدم الدالة السابقة مثل (Chr(65
الدالة Asc عكس
الدالة السابقة تماماُ , حيث تستخدم لإيجاد الرقم المقابل للحرف
.
مثال يوضح ذلك يبين كيفية جعل صندوق النص لايقبل إلى
حروف كبيرة باستخدام هذا الحدث:
code:
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim char As String
char = Chr(KeyAscii)
KeyAscii = Asc(UCase(char))
End Sub
| |
وهناك العديد من الفوائد لهذا
الحدث منها توقيف أزرار معينة مثلاً كأن تجل صندوق النص لايقبل
إلى أرقام :
code:
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case Chr(KeyAscii)
Case 0 To 9
'Else نفذ أمر أودعة فاضي فإن تحقق الشرط فلن يستعدي جملة
Case Else
If KeyAscii = vbKeyBack Then Exit Sub
KeyAscii = 0
End Select
End Sub
| |
والملاحض هنا إذا كان لدي
أكثر من صندوق نص فهنا إما أجعل الصناديق كمصفوفة كي تم وضع
الحدث لكل صناديق النصوص أو أقوم باستعداء الحدث السابق من نفس
الحدث للكائن الأخر : مثال أضف صندوق نص أخر إلى النموذج وكتب
الكود التالي في الحدث لصندوق النص الثاني كمايلي :
code:
Private Sub Text2_KeyPress(KeyAscii As Integer)
Text1_KeyPress KeyAscii
End Sub | | لاحض الكود السابق : قمنا بتمرير
KeyAscii إلى KeyAscii الخاص بالصندوق الأول ليخضع لنفس الكود,
وبذلك سيتأثر الصندوق الثاني بنفس الكود الموجود في الحدث الخاص
بالصندوق الأول.
ملاحضة هامة : هناك خصائص تتعلق بهذا
الحدث مثل الخاصية : KeyPreview وهي تتبع بعض النوافذ مثل
Form1 و UserControl و PropertyPage وضيفة هذه الخاصية مهمة فهي
تحدد ما إذا كانت النافذه هي من ستستقبل احداث لوحة المفاتيح
أولا أم الأدوات الموضوعة بداخلها : خير مثال هوا التالي : ضع
في النافذة Form زر أمر وصندوق نص ثم ضع في الحدث الخاص بصندوق
النص نفس الكود السابق لمنع إدخال الأحرف إلى النص ثم ضع في حدث
النافذة والزر لكود التالي : Me.Caption = KeyCode بعد ذلك
قم بتشغيل البرنامج قم بالغط على مفاتح الأحرف (a , b t , f,f )
وغيرها ستلاحض عم كتابتها على شريط العنوان الخاص بالنافذة وهذا
يعني أن حث صندوق النص هوا من بدأ أولاً قم بتغير الخاصية
المذكورة من False إلى true لاحض ان ارقام الأحرف بدأت تضهر على
النافذة عند الضغط على الأزرار وهذا يعني أن حدث Form هوا من بدا
.
وهناك فوائد أخرى كثيرة , فقد ذكرت هذه الأمثلة لكي
نتعرف علىأهمية هذا الحدث فعندما نود برمجة الحدث فأننا يجب أن
نعرف ما هي أهميتة كي نحدد بالضبط ماهي الأحداث التي يجب ان ترفق
مع الكائن الذي سنقوم ببرمجته لذي يجب أن نأخذ فكرة عامة قبل أن
بدأ بالبرمجة
.
----------------------------------------
4 -
حدث MouseMove : يستخدم هذا الحدث عند مرور الماوس فوق احد
الكائنات أو النوافذ(كل من تملك هذا الحدث) هذا الحدث مهم
جداُ جداُ فمنة سنولد حدثين جديدين نسميهما MouseOver , MouseOut
كما سيأتي لاحقاً
مثال :
code:
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
End Sub
| |
أول بارمتر أو أجزاء من الحدث
: Button :يعيد قيمة صحيحة تبين حالة زر الماوس وهذه القيم هي
: 1 ضغط زر يساري 2 ضغط زر يميني 4 ضغط زر
الوسط
الثوابت المناضرة للأرقام 1 = vbLeftButton
2 = vbRightButton 4 = vbMiddleButton
2 - Shift
: يعمل نفس العمل في حدث KeyCode (راجع الحدث KeyCode ) . 3 -
x يرجع قيمة عددية تبين الموقع الحالي لمؤشر الماوس بالنسبة
للمستوى الأفقي للشاشة . 4 - y يرجع قيمة عددية تبين الموقع
الحالي لمؤشر الماوس بالنسبة للمستوى العمودي للشاشة
.
ملاحضة : x,y يعبر عنهما بالغة النضام المناسبة
الموضوعة بواسطة الخصائص ScaleWidht , ScaleHeight , ScaleTop ,
ScaleLeft
.
----------------------------------------
5
- الحدث MouseDown : يحدث عندما يتم الضغط بالزر الأيمن على
الكائن . يخضع لنفس القيم التي يأخذها الحدث
MouseMove
----------------------------------------
6
- الحدث MouseUp : يحدث عندما يتم رفع الغط عن زر الماوس
يخضع لنفس القيم التي يأخذها الحدث MouseMove
ملاحضة
هامة : x,y في الثلاثة الأحداث السابقة للماوس تختلف أو تتغير
قيمتها من حدث لأخر , وبالتالي يجب لأن نحفض قيم x,y للقيم
السابقة للحدث MouseDown في متغيرات كي يتم مثلأ مقارنتها لحضة
الضغط وعند مرور الماوس MouseMove في بعض العمليات .
أنضر
المثال المرفق :
بعد أن أخذنا جزء بسيط من الأحداث فإننا
نستطيع الأن تقسم الأحداث إلى 4 أنواع وهي :
أولاً :
أحداث خاصة بالوحة المفاتيح مثل (KeyDown, KeyPress,
KeyUp) ثانيا: أحداث خاصة بالماوس مثل مثل (MouseMove,
MouseDown, MouseUp) ثالثاً: أحداث مشتركة بين الماوس ولوحة
المفاتيح مثل ( GotFocus, SetFocusClick,DblClick) وهي تلك
الأحداث التي يمكن أن تنفذ إما من خلال لوحة المفاتيح أو
الماوس رابعاً: أحداث خاصة : وهذا النوع إما يتبع كائنات
أو نوافذ ليس للماوس أو لوحة المفاتيح عنها دخل ,
فعند ما
نود أن نبرمج حدث (نصمم) يجب أولاُ أن نحدد الأحداث من الأربعة
الأقسام السابقة ثم نقوم بوضع الفكرة التي سنحتاجها للحدث لتنفيذ
مهمة معينة
.
------------------------------------- فقط قليل من
الإرهاق أوقفني عن مواصة الدرس لذلك سنقوم بإكمال الدرس في الدرس
الرابع إن شاء الله وسنتعرف في الدرس على القسم الرابع
(أحداث خاصة ) بعدها نبدا بالتصميم بإذن الله وقد كنت أفكر أن
أبدا على طول من الدرس الثاني بأخذ اساليب تصميم الخصائص
والأحداث ولكن أحببت أن أضع أولا فكره عنها .
أرفقت
المثال التالي بدل عن السابق نضراً لوجود مشكلة به : بعد فتح
الملف خذ الأداه ButtonSub7ByFawaz.ocx وضعها في مجلد النضام
(System) أما إذا كان نضام التشغيل NT ضعها في مجلد (System32) .
ثم قم بوضعها في قائمة Components ثم قم بعد ذلك بفتح
المشروع
وإلى القاء في الدرس القادم , السلام عليكم ورحمة
الله وبركاتة
لتنزيل الملف المرفق
أنقر الرابط التالي: sub7form.zip بلا مسؤلية على المنتدى إن كان
المرفق يحتوي على فيروسات أو وسائل
تجسس تم
تحميل هذا الملف 139 مرة.
__________________ الإيمان
يمان والحكمة يمانية
أخبر
المراقب عن هذا الرد | رقم
الـ IP | تحرير
التوقيع |